Code 属性

Java程序方法体里的代码经过Javac编译器处理之后,最终变成字节码指令存储在Code属性内。

Code属性出现在方法表的属性集合之中,并非所有的方法表都必须存在这个属性,譬如接口或抽象类。

细节

  • max_stack:代表操作数栈(Operand Stack)深度的最大值。在方法执行的任意时刻,操作数栈都不会超过这个深度。虚拟机运行的时候需要根据这个值来分配栈桢(Stack Frame)中的操作栈深度。

  • max_locals:代表了局部变量表所需的存储空间,单位是变量槽。实例方法会有隐藏参数this。需要注意并不是方法使用多少局部变量就分配多少变量槽,当变量超出其作用域之后,变量占用的变量槽可以被其他变量重用。

  • code_length:是一个u4类型的长度值,理论上最大值可以达到2的32次幂,但《Java虚拟机规范》中明确限制了一个方法不允许超过65535条字节码指令,实际上只使用了u2的长度。

  • code:代表字节码指令,注意到是u1类型,最多可以表达256(0~255)条指令。